import { getToken, setToken, removeToken } from '@/utils/auth'
import { loginAPI, getUserProfileAPI, getUserInfoAPI } from '@/api'
import { resetRouter } from '@/router'
const getDefaultState = () => {
  return {
    token: getToken(),
    userInfo: {}
  }
}
// 口诀: return右侧的值返回到本次函数调用处

const state = getDefaultState()

const mutations = {
  // 重置state
  RESET_STATE: (state) => {
    removeToken()
    Object.assign(state, getDefaultState())
    // 重置路由系统
    resetRouter()
  },
  // 保存token
  SET_TOKEN (state, val) {
    state.token = val
    setToken(val)
  },
  // 保存用户信息
  SET_USER (state, val) {
    state.userInfo = val
  }
}

// 知识点: actions方法用dispatch调用后在dispatch原地始终返回的是一个Promise对象
// 如果自己有return 一个Promise对象会覆盖掉它默认返回的
const actions = {
  // 登录
  async loginActions ({ commit }, loginForm) {
    const res = await loginAPI(loginForm)

    return res
  },
  // 获取用户信息
  async getUserInfoActions ({ commit }) {
    // console.log(123)
    const res = await getUserProfileAPI()
    // console.log(res)
    const res2 = await getUserInfoAPI(res.data.userId)
    console.log(res2)
    commit('SET_USER', { ...res.data, ...res2.data }) // 后台返回真正对象，里的data属性值（用户信息对象）
    return res
  }
}

export default {
  namespaced: true,
  state,
  mutations,
  actions
}

